package instruction;
import structureDonnee.Expression;
import structureDonnee.Variable;
import verificateur.EnsembleVariable;


public class Affectation{
	//affectation est un string qui est entre []. affectation = "[....]"
	//affectation est un type de instruction
	//affectation = "[v=expr]"
	//elle a un champ variable pour "v" et un champ Expression pour "expr"
	Variable v;
	Expression expr;

	public Affectation(){
		v = new Variable();
		expr = new Expression();
	}
	public Affectation(Affectation aff){
		v = new Variable(aff.v);
		expr = new Expression(aff.expr);
	}
	//construire une affectation depuis un String "[v=expr]", sous condition de connaitre Ensemble Variable
	public Affectation(String s,EnsembleVariable ev){
		String ms = s;
		int i=0;
		int carLu=s.charAt(i);
		i++; carLu=s.charAt(i);//sauter "["
		StringBuffer buffer = new StringBuffer();
		//lire le string de variable
		do{
			buffer.append((char)carLu);	i++;carLu = s.charAt(i);
		}while("=".indexOf(carLu)==-1);
		
		//construct variable from ms
		ms = buffer.toString();
		v = new Variable(ms);
		buffer.delete(0,buffer.length());
		
		i++;//sauter "="
		carLu = s.charAt(i);
		do{
			buffer.append((char)carLu);	i++;carLu = s.charAt(i);
		}while("]".indexOf(carLu)==-1);
		ms = buffer.toString();
		expr = new Expression(ms,ev);
	}
	
	public Variable getVariable(){return v;}
	public Expression getExpr(){return expr;}

	//afficher une affectation
	public void publish(EnsembleVariable ev){
		System.out.print("INSTR-Affectation:["+v.getNom()+"=");expr.publish(ev);System.out.print("]");
	}
}
